package display
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.utils.ByteArray;
	
	/**
	 * 位图
	 * @author gcxk721
	 * 2012-6-18
	 * 下午1:38:58
	 */
	public class QhBitmap
	{
		
		/**
		 * 位图的宽 
		 */
		public var bmdWidth : int;
		
		/**
		 * 位图的高 
		 */
		public var bmdHeight : int;
		
		/**
		 * x轴偏移
		 */
		public var x : int;
		
		/**
		 * y轴偏移
		 */
		public var y : int;
		
		/**
		 * 位图数据
		 */
		public var bmd : BitmapData;
		
		/**
		 * 是否需要翻转位图 
		 */
		protected var isMatrix : Boolean = false;
		
		/**
		 * 翻转接收对象 
		 */
		protected var qhBitmap : QhBitmap;
		
		/**
		 * 加载器 
		 */
		private var loader : Loader;
		
		/**
		 * 当前的父对像 
		 */
		private var parent : QhMovieClip;
		
		public function QhBitmap()
		{
			
		}
		
		/**
		 * 解析数据
		 * @param bytes
		 * 
		 */		
		public function analysis(bytes : ByteArray) : void
		{
			var len : int = bytes.bytesAvailable;
			var bmdBytes : ByteArray = new ByteArray();
			bytes.readBytes(bmdBytes, 0, len);
			loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			loader.loadBytes(bmdBytes);
		}
		
		/**
		 * 初始化位图信息完成
		 * @param evt
		 * 
		 */
		protected function onComplete(evt : Event):void
		{
			loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
			var loaderInfo : LoaderInfo = evt.currentTarget as LoaderInfo;
			bmd = Bitmap(loaderInfo.content).bitmapData.clone();
			Bitmap(loaderInfo.content).bitmapData.dispose();
//			loader.close();
			loader.unload();
			loader = null;
			if(isMatrix)
			{
				matrixMethod();
			}
			bmd.lock();
			if(parent != null && parent.curBitmap == this)
			{
				parent.bmp.bitmapData = bmd;
			}
		}
		
		public function setMatrix(value : QhBitmap) : void
		{
			
			qhBitmap = value;
			if(bmd == null)
			{
				isMatrix = true;
			}
			else
			{
				matrixMethod();
			}
		}
		
		private function matrixMethod() : void
		{
			qhBitmap.bmd = QhBitmapAnalysiser.cacheMatrixBitmap(bmd);
			qhBitmap.x = -(bmd.width + x);
			if(parent != null && parent.curBitmap == qhBitmap)
			{
				parent.bmp.bitmapData = qhBitmap.bmd;
			}
		}
		
		public function setParent(mc : QhMovieClip) : void
		{
			parent = mc;
		}
		
		/**
		 * 清除资源 
		 * 
		 */		
		public function destory() : void
		{
			if(bmd != null)
			{
				bmd.dispose();
				bmd = null;
			}
		}
		
	}
}